package com.project.comom;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.List;

public class NumberDealUtils {

    /**
     * BigDecimal 乘10000
     * @param bigDecimal
     * @return
     */
    public static BigDecimal multiply_bigDecimal(BigDecimal bigDecimal){
        if (bigDecimal == null) return BigDecimal.ZERO;
        BigDecimal multiply = new BigDecimal("10000");
        BigDecimal dealBigDecimal = bigDecimal.multiply(multiply);
        return dealBigDecimal;
    }

    /**
     * BigDecimal 除以10000
     * @param bigDecimal
     * @return
     */
    public static BigDecimal divide_bigDecimal(BigDecimal bigDecimal){
        if (bigDecimal == null) return BigDecimal.ZERO;
        BigDecimal divide = new BigDecimal("10000");
        BigDecimal dealBigDecimal = bigDecimal.divide(divide, 6, RoundingMode.HALF_UP);
        if (dealBigDecimal.compareTo(BigDecimal.ZERO) == 0){
            dealBigDecimal = bigDecimal.divide(divide, 10, RoundingMode.HALF_UP);
        }
        return dealBigDecimal;
    }

    /**
     * 万元 转 元
     * @param strNum 字符串 万元
     * @return 字符串 元
     */
    public static String multiply_10000(String strNum){
        try {
            // 使用 BigDecimal 进行精确计算
            BigDecimal number = new BigDecimal(strNum);
            BigDecimal multiplier = new BigDecimal("10000");
            BigDecimal result = number.multiply(multiplier);
            // 返回字符串表示，保留原始精度
            return result.stripTrailingZeros().toPlainString();
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("申请金额转换异常");
        }
    }

    /**
     * 万元 转 元
     * @param strNum 字符串 万元
     * @return 字符串 元
     */
    public static String divide_10000(String strNum){
        try {
            // 使用 BigDecimal 进行精确计算
            // 使用 BigDecimal 进行精确计算
            BigDecimal number = new BigDecimal(strNum);
            BigDecimal divisor = new BigDecimal("10000");
            BigDecimal result = number.divide(divisor, 10, RoundingMode.HALF_UP);
            // 返回字符串表示，保留原始精度
            return result.stripTrailingZeros().toPlainString();
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("申请金额转换异常");
        }
    }

    public static float multiply_10000(float num) {
        try {
            // 用 BigDecimal 保证精度
            BigDecimal number = new BigDecimal(Float.toString(num));
            BigDecimal multiplier = new BigDecimal("10000");
            BigDecimal result = number.multiply(multiplier);
            return result.floatValue(); // 转回 float
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("申请金额转换异常");
        }
    }

    public static void mapListYuan2Wan(List<HashMap<String, Object>> list,String key) {
        for (HashMap<String, Object> re : list) {
            mapYuan2Wan(re, key);
        }
    }

    public static void mapYuan2Wan(HashMap<String, Object> map,String key) {
        if (map.get(key) != null) {
            String feeWanYuan = NumberDealUtils.divide_10000(map.get(key).toString());
            map.put(key, feeWanYuan);
        } else {
            map.put(key, null);
        }
    }
}
